package com.hua.result;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 全局统一的返回结果
 * @author ONE-X
 * @date 2020/11/10
 */
@Data
public class R implements Serializable {

	private R(){

	}

	/**
	 * 是否成功
	 */
	private Boolean success;
	/**
	 * 返回码
	 */
	private Integer code;
	/**
	 * 返回消息
	 */
	private String message;

	private Map<String, Object> data = new HashMap<>();

	/**
	 * 成功同意返回 不包含数据
	 * @return
	 */
	public static R ok(){
		R r = new R();
		r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
		r.setCode(ResultCodeEnum.SUCCESS.getCode());
		r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
		return r;
	}

	/**
	 * 错误信息
	 * @return
	 */
	public static R error(){
		R r = new R();
		r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess());
		r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode());
		r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage());
		return r;
	}

	/**
	 * 自定义的同意返回 不包含数据
	 * @param result
	 * @return
	 */
	public static R setResult(ResultCodeEnum result){
		R r = new R();
		r.setSuccess(result.getSuccess());
		r.setCode(result.getCode());
		r.setMessage(result.getMessage());
		return r;
	}

	public R success(Boolean success){
		this.setSuccess(success);
		return this;
	}

	public R message(String message){
		this.setMessage(message);
		return this;
	}

	public R code(Integer code){
		this.setCode(code);
		return this;
	}

	public R data(String key, Object value){
		this.data.put(key, value);
		return this;
	}

	public R data(Map<String, Object> map){
		this.setData(map);
		return this;
	}


}
